home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / machine / subs.c < prev    next >
C/C++ Source or Header  |  2000-04-23  |  6KB  |  233 lines

  1. /***************************************************************************
  2.  
  3. Subs machine
  4.  
  5. If you have any questions about how this driver works, don't hesitate to
  6. ask.  - Mike Balfour (mab22@po.cwru.edu)
  7. ***************************************************************************/
  8.  
  9. #include "driver.h"
  10.  
  11. static int subs_steering_buf1;
  12. static int subs_steering_buf2;
  13. static int subs_steering_val1;
  14. static int subs_steering_val2;
  15.  
  16. /***************************************************************************
  17. subs_init_machine
  18. ***************************************************************************/
  19. void subs_init_machine(void)
  20. {
  21.     subs_steering_buf1 = 0;
  22.     subs_steering_buf2 = 0;
  23.     subs_steering_val1 = 0x00;
  24.     subs_steering_val2 = 0x00;
  25. }
  26.  
  27. /***************************************************************************
  28. subs_interrupt
  29. ***************************************************************************/
  30. int subs_interrupt(void)
  31. {
  32.     /* only do NMI interrupt if not in TEST mode */
  33.     if ((input_port_2_r(0) & 0x40)==0x40)
  34.         return nmi_interrupt();
  35.  
  36.     return 0;
  37. }
  38.  
  39. /***************************************************************************
  40. Steering
  41.  
  42. When D7 is high, the steering wheel has moved.
  43. If D6 is high, it moved left.  If D6 is low, it moved right.
  44. Be sure to keep returning a direction until steer_reset is called.
  45. ***************************************************************************/
  46. static int subs_steering_1(void)
  47. {
  48.         static int last_val=0;
  49.         int this_val;
  50.         int delta;
  51.  
  52.         this_val=input_port_3_r(0);
  53.  
  54.         delta=this_val-last_val;
  55.         last_val=this_val;
  56.         if (delta>128) delta-=256;
  57.         else if (delta<-128) delta+=256;
  58.         /* Divide by four to make our steering less sensitive */
  59.         subs_steering_buf1+=(delta/4);
  60.  
  61.         if (subs_steering_buf1>0)
  62.         {
  63.                 subs_steering_buf1--;
  64.                 subs_steering_val1=0xC0;
  65.         }
  66.         else if (subs_steering_buf1<0)
  67.         {
  68.                 subs_steering_buf1++;
  69.                 subs_steering_val1=0x80;
  70.         }
  71.  
  72.         return subs_steering_val1;
  73. }
  74.  
  75. static int subs_steering_2(void)
  76. {
  77.         static int last_val=0;
  78.         int this_val;
  79.         int delta;
  80.  
  81.         this_val=input_port_4_r(0);
  82.  
  83.         delta=this_val-last_val;
  84.         last_val=this_val;
  85.         if (delta>128) delta-=256;
  86.         else if (delta<-128) delta+=256;
  87.         /* Divide by four to make our steering less sensitive */
  88.         subs_steering_buf2+=(delta/4);
  89.  
  90.         if (subs_steering_buf2>0)
  91.         {
  92.                 subs_steering_buf2--;
  93.                 subs_steering_val2=0xC0;
  94.         }
  95.         else if (subs_steering_buf2<0)
  96.         {
  97.                 subs_steering_buf2++;
  98.                 subs_steering_val2=0x80;
  99.         }
  100.  
  101.         return subs_steering_val2;
  102. }
  103.  
  104. /***************************************************************************
  105. subs_steer_reset
  106. ***************************************************************************/
  107. WRITE_HANDLER( subs_steer_reset_w )
  108. {
  109.     subs_steering_val1 = 0x00;
  110.     subs_steering_val2 = 0x00;
  111. }
  112.  
  113. /***************************************************************************
  114. subs_control_r
  115. ***************************************************************************/
  116. READ_HANDLER( subs_control_r )
  117. {
  118.     int inport = input_port_1_r(offset);
  119.  
  120.     switch (offset & 0x07)
  121.     {
  122.         case 0x00:        return ((inport & 0x01) << 7);    /* diag step */
  123.         case 0x01:        return ((inport & 0x02) << 6);    /* diag hold */
  124.         case 0x02:        return ((inport & 0x04) << 5);    /* slam */
  125.         case 0x03:        return ((inport & 0x08) << 4);    /* spare */
  126.         case 0x04:        return ((subs_steering_1() & 0x40) << 1);    /* steer dir 1 */
  127.         case 0x05:        return ((subs_steering_1() & 0x80) << 0);    /* steer flag 1 */
  128.         case 0x06:        return ((subs_steering_2() & 0x40) << 1);    /* steer dir 2 */
  129.         case 0x07:        return ((subs_steering_2() & 0x80) << 0);    /* steer flag 2 */
  130.     }
  131.  
  132.     return 0;
  133. }
  134.  
  135. /***************************************************************************
  136. subs_coin_r
  137. ***************************************************************************/
  138. READ_HANDLER( subs_coin_r )
  139. {
  140.     int inport = input_port_2_r(offset);
  141.  
  142.     switch (offset & 0x07)
  143.     {
  144.         case 0x00:        return ((inport & 0x01) << 7);    /* coin 1 */
  145.         case 0x01:        return ((inport & 0x02) << 6);    /* start 1 */
  146.         case 0x02:        return ((inport & 0x04) << 5);    /* coin 2 */
  147.         case 0x03:        return ((inport & 0x08) << 4);    /* start 2 */
  148.         case 0x04:        return ((inport & 0x10) << 3);    /* VBLANK */
  149.         case 0x05:        return ((inport & 0x20) << 2);    /* fire 1 */
  150.         case 0x06:        return ((inport & 0x40) << 1);    /* test */
  151.         case 0x07:        return ((inport & 0x80) << 0);    /* fire 2 */
  152.     }
  153.  
  154.     return 0;
  155. }
  156.  
  157. /***************************************************************************
  158. subs_options_r
  159. ***************************************************************************/
  160. READ_HANDLER( subs_options_r )
  161. {
  162.     int opts = input_port_0_r(offset);
  163.  
  164.     switch (offset & 0x03)
  165.     {
  166.         case 0x00:        return ((opts & 0xC0) >> 6);        /* language */
  167.         case 0x01:        return ((opts & 0x30) >> 4);        /* credits */
  168.         case 0x02:        return ((opts & 0x0C) >> 2);        /* game time */
  169.         case 0x03:        return ((opts & 0x03) >> 0);        /* extended time */
  170.     }
  171.  
  172.     return 0;
  173. }
  174.  
  175. /***************************************************************************
  176. subs_lamp1_w
  177. ***************************************************************************/
  178. WRITE_HANDLER( subs_lamp1_w )
  179. {
  180.     if ((offset & 0x01) == 1)
  181.     {
  182.         osd_led_w(0,0);
  183.         logerror("LED 0 OFF\n");
  184.     }
  185.     else
  186.     {
  187.         osd_led_w(0,1);
  188.         logerror("LED 0 ON\n");
  189.     }
  190. }
  191.  
  192. /***************************************************************************
  193. subs_lamp2_w
  194. ***************************************************************************/
  195. WRITE_HANDLER( subs_lamp2_w )
  196. {
  197.     if ((offset & 0x01) == 1)
  198.     {
  199.         osd_led_w(1,0);
  200.         logerror("LED 1 OFF\n");
  201.     }
  202.     else
  203.     {
  204.         osd_led_w(1,1);
  205.         logerror("LED 1 ON\n");
  206.     }
  207. }
  208.  
  209. /***************************************************************************
  210. TODO: sub sound functions
  211. ***************************************************************************/
  212.  
  213. WRITE_HANDLER( subs_sonar2_w )
  214. {
  215. }
  216.  
  217. WRITE_HANDLER( subs_sonar1_w )
  218. {
  219. }
  220.  
  221. WRITE_HANDLER( subs_crash_w )
  222. {
  223. }
  224.  
  225. WRITE_HANDLER( subs_explode_w )
  226. {
  227. }
  228.  
  229. WRITE_HANDLER( subs_noise_reset_w )
  230. {
  231. }
  232.  
  233.